package DataStructure.linkList.swordOffer;

import DataStructure.linkList.ListNode;

/**
 * 剑指 Offer 18. 删除链表的节点 https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/
 * 题目简述：给定一个不含重复值的单链表和一个要删除的值，定义一个函数删除该值节点。返回删除后的链表的头节点。
 */
public class DeleteNode {

    /**
     * 思路：若head为null则直接返回null，若头结点值为val，则直接返回head.next，否则遍历后续节点进行删除，最后返回head
     */
    public ListNode deleteNode(ListNode head, int val) {
        if(head == null) return head;
        ListNode p = head;//p指向头结点
        if(p.val == val) return p.next;//若头结点值为val，则直接返回p.next
        while(p.next != null) {//否则遍历后续节点进行删除，最后返回head
            if(p.next.val == val) {
                p.next = p.next.next;
                return head;
            }
            p = p.next;
        }
        return head;
    }
}
